//
//  MOFormField.m
//  MOED, Version 1.0
//
//  http://moed.googlecode.com/
//
//  Copyright (c) 2011, Eternity Technologies.
//  All rights reserved.
// 
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//    * Redistributions of source code must retain the above copyright
//      notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above copyright
//      notice, this list of conditions and the following disclaimer in the
//      documentation and/or other materials provided with the distribution.
//    * Neither the name of the Eternity Technologies nor the
//      names of its contributors may be used to endorse or promote products
//      derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY ETERNITY TECHNOLOGIES ''AS IS'' AND ANY
//  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
//  DISCLAIMED. IN NO EVENT SHALL ETERNITY TECHNOLOGIES BE LIABLE FOR ANY
//  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
//  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
//  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
//  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
//  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

#import "MOFormField.h"
#import "MOFormDescription.h"

@implementation MOFormField

@synthesize managedObjectKey;
@synthesize labelText;
@synthesize fieldType;
@synthesize required;
@synthesize options;
@synthesize longTextModeInReadOnly;
@synthesize associationForm;

@synthesize tag;
@synthesize useLocalizedStrings;

- (id) initWithJSON:(id) jsonObject {
	self = [super init];
	if(self) {
		
		useLocalizedStrings = NO;

		managedObjectKey = [jsonObject valueForKey:@"managedObjectKey"] != [NSNull null] ? [[jsonObject valueForKey:@"managedObjectKey"] copy]:nil;
		labelText = [jsonObject valueForKey:@"labelText"] != [NSNull null] ? [[jsonObject valueForKey:@"labelText"] copy]:nil;
		options = [jsonObject valueForKey:@"options"] != [NSNull null] ? [[jsonObject valueForKey:@"options"] copy]:nil;
		required = [jsonObject valueForKey:@"required"] != [NSNull null] ? [[jsonObject valueForKey:@"required"] boolValue]:NO;
		longTextModeInReadOnly = [jsonObject valueForKey:@"longTextModeInReadOnly"] != [NSNull null] ? [[jsonObject valueForKey:@"longTextModeInReadOnly"] boolValue]:NO;

		/* Load child form if required */
		associationForm = [jsonObject valueForKey:@"associationFormDescription"] ? [[MOFormDescription alloc] initWithFormDescriptionFilename:[jsonObject valueForKey:@"associationFormDescription"]]:nil;
		
		/* Translate JSON text useful enumerators */
		if([[jsonObject valueForKey:@"fieldType"] isEqualToString:@"string"])
			fieldType = MOFieldTypeString;
		else if([[jsonObject valueForKey:@"fieldType"] isEqualToString:@"integer"])
			fieldType = MOFieldTypeInteger;
		else if([[jsonObject valueForKey:@"fieldType"] isEqualToString:@"float"])
			fieldType = MOFieldTypeFloat;
		else if([[jsonObject valueForKey:@"fieldType"] isEqualToString:@"model"])
			fieldType = MOFieldTypeModel;
	
	}
	return self;
}

- (void) dealloc {
	[managedObjectKey release];
	[labelText release];
	[associationForm release];
	[options release];
	[super dealloc];
}

- (NSString *) labelText {
	if(useLocalizedStrings) return NSLocalizedString(labelText, @"");
	return labelText;
}

@end
